#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "Thread.hpp"
#include <sched.h>

using namespace ThreadMoudle;

int tickets = 100;

void route(const std::string &name)
{
    while(true)
    {
        if(tickets > 0)
        {
            //抢票过程
            usleep(100); // 1ms -> 强票花费的时间
            printf("who : %s, get a ticket : %d\n", name.c_str(), tickets);
            tickets--;
        }
        else
        {
            break;
        }
    }
}

int main()
{
    Thread t1("thread-1", route);
    Thread t2("thread-2", route);
    Thread t3("thread-3", route);
    Thread t4("thread-4", route);

    t1.Start();
    t2.Start();
    t3.Start();
    t4.Start();

    t1.Join();
    t2.Join();
    t3.Join();
    t4.Join();

}


// pthread_cond_t cond;
// pthread_mutex_t mutex;


// void *r1(void *arg)
// {
//     while(1)
//     {
//         pthread_cond_wait(&cond, &mutex);
//         printf("活动\n");
//     }
// }


// void *r2(void *arg)
// {
//     while(1)
//     {
//         pthread_cond_signal(&cond);
//         sleep(1);
//     }
// }

// int main()
// {
//     pthread_t t1, t2;

//     pthread_cond_init(&cond, NULL);
//     pthread_mutex_init(&mutex, NULL);

//     pthread_create(&t1, NULL, r1, NULL);
//     pthread_create(&t2, NULL, r2, NULL);

//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);

//     pthread_mutex_destroy(&mutex);
//     pthread_cond_destroy(&cond);
// }

// // 改进抢票系统
// int ticket = 100;
// pthread_mutex_t mutex;

// void *route(void *arg)
// {
//     char *id = (char *)arg;
//     while (1)
//     {
//         usleep(1000);

//         pthread_mutex_lock(&mutex);
//         if (ticket > 0)
//         {
//             printf("%s sells ticket : %d\n", id, ticket);
//             ticket--;
//             pthread_mutex_unlock(&mutex);
//         }
//         else
//         {
//             pthread_mutex_unlock(&mutex);

//             break;
//         }
//     }
//     return 0;
// }

// int main()
// {
//     pthread_t t1, t2, t3, t4;

//     pthread_mutex_init(&mutex, NULL);

//     pthread_create(&t1, NULL, route, (void *)"thread 1");
//     pthread_create(&t2, NULL, route, (void *)"thread 2");
//     pthread_create(&t3, NULL, route, (void *)"thread 3");
//     pthread_create(&t4, NULL, route, (void *)"thread 4");

//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
//     pthread_join(t3, NULL);
//     pthread_join(t4, NULL);

//     pthread_mutex_destroy(&mutex);
// }

// int ticket = 100;

// void *route(void *arg)
// {
//     char *id = (char*)arg;
//     while(1)
//     {
//         if(ticket > 0)
//         {
//             usleep(1000);
//             printf("%s sells ticket : %d\n", id, ticket);
//             ticket--;
//         }
//         else
//         {
//             break;
//         }
//     }
//     return 0;
// }

// int main()
// {
//     pthread_t t1, t2, t3, t4;

//     pthread_create(&t1, NULL, route, (void *)"thread 1");
//     pthread_create(&t2, NULL, route, (void *)"thread 2");
//     pthread_create(&t3, NULL, route, (void *)"thread 3");
//     pthread_create(&t4, NULL, route, (void *)"thread 4");

//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
//     pthread_join(t3, NULL);
//     pthread_join(t4, NULL);

// }